package com.atwisdom.star.core.bsl.das.Impl;

import com.alibaba.fastjson.JSONObject;
import com.atwisdom.star.common.vo.ResultInfo;
import com.atwisdom.star.core.bsl.das.RealTimeInfoBslService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class RealTimeInfoBslServiceImpl implements RealTimeInfoBslService {

    @Value("${das.dasApi}")
    private String dasApi;

    @Autowired
    private RestTemplate restTemplate;
    public ResultInfo<?> queryAll() {
        return this.queryAllFromDas();
    }

    public ResultInfo<?> query(JSONObject param) {
        return this.queryFromDas(param);
    }

    public ResultInfo<?> queryByPage(JSONObject param) {
        return this.queryByPageFromDas(param);
    }

    public ResultInfo<?> getById(Object id) {
       return this.getByIdFromDas(id);
    }

    public ResultInfo<?> getByField(JSONObject param) {
        return this.getByFieldFromDas(param);
    }


    /**
     * 设备采集踪合统计：计算生产节拍、计算日报警数、计算月报警数、处理设备状态
     * @param param 参数 equipCode 设备编码,startTime 开始时间，endTime 结束时间
     * @return 返回统计信息
     */
    public ResultInfo<?> getStatInfo(JSONObject param) {
        return this.getStatInfoFromDas(param);
    }

    /**
     * 按分钟统计设备计数
     * @param param 参数 equipCode 设备编码,startTime 开始时间，endTime 结束时间
     * @return 返回统计信息
     */
    public ResultInfo<?> getMinuteEquipCount(JSONObject param) {
        return this.getMinuteEquipCountFromDas(param);
    }

    /**
     * 按分钟统计设备列表计数
     * @param param 参数 equipCode 设备编码,startTime 开始时间，endTime 结束时间
     * @return 返回统计信息
     */
    public ResultInfo<?> queryMinuteEquipCount(JSONObject param) {
        String url = this.dasApi + "das/minute/queryEquipCount";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    /**
     * 按小时统计设备计数
     * @param param 参数 equipCode 设备编码,startTime 开始时间，endTime 结束时间
     * @return 返回统计信息
     */
    public ResultInfo<?> getHourEquipCount(JSONObject param) {
        return this.getHourEquipCountFromDas(param);
    }

    /**
     * 按小时统计设备列表计数
     * @param param 参数 equipCode 设备编码,startTime 开始时间，endTime 结束时间
     * @return 返回统计信息
     */
    public ResultInfo<?> queryHourEquipCount(JSONObject param) {
        return this.queryHourEquipCountFromDas(param);
    }
    /**
     * 按小时统计设备品番计数
     * @param param 参数 equipCode 设备编码,pCode 品番编码，startTime 开始时间，endTime 结束时间
     * @return 返回统计信息
     */
    public ResultInfo<?> getHourEquipPfCount(JSONObject param) {
        return this.getHourEquipPfCountFromDas(param);
    }

    /**
     * 设备有效工作时长
     * @param param 参数 equipCode 设备编码,startTime 开始时间，endTime 结束时间
     * @return 返回统计信息
     */
    public ResultInfo<?> getHourEquipWorkDuration(JSONObject param) {
        return this.getHourEquipWorkDurationFromDas(param);
    }

    /**
     * 按天统计设备计数
     * @param param 参数 equipCode 设备编码,startTime 开始时间，endTime 结束时间
     * @return 返回统计信息
     */
    public ResultInfo<?> getDayEquipCount(JSONObject param) {
        return this.getDayEquipCountFromDas(param);
    }


    /**
     * 按天统计设备列表计数
     * @param param 参数 equipCodes 设备编码,startTime 开始时间，endTime 结束时间
     * @return 返回统计信息
     */
    public ResultInfo<?> queryDayEquipCount(JSONObject param) {
        return this.queryDayEquipCountFromDas(param);
    }

    /**
     * 按天统计设备品番计数
     * @param param 参数 equipCode 设备编码,pCode 品番编码，startTime 开始时间，endTime 结束时间
     * @return 返回统计信息
     */
    public ResultInfo<?> getDayEquipPfCount(JSONObject param) {
        return this.getDayEquipPfCountFromDas(param);
    }

    /**
     * 按天统计设备有效工作时长
     * @param param 参数 equipCode 设备编码,startTime 开始时间，endTime 结束时间
     * @return 返回统计信息
     */
    public ResultInfo<?> getDayEquipWorkDuration(JSONObject param) {
        return this.getDayEquipWorkDurationFromDas(param);
    }

    /**
     * 按月统计设备计数
     * @param param 参数 equipCode 设备编码,startTime 开始时间，endTime 结束时间
     * @return 返回统计信息
     */
    public ResultInfo<?> getMonthEquipCount(JSONObject param) {
        return this.getMonthEquipCountFromDas(param);
    }


    /**
     * 按月统计设备列表计数
     * @param param 参数 equipCodes 设备编码,startTime 开始时间，endTime 结束时间
     * @return 返回统计信息
     */
    public ResultInfo<?> queryMonthEquipCount(JSONObject param) {
        return this.queryMonthEquipCountFromDas(param);
    }

    /**
     * 按月统计设备品番计数
     * @param param 参数 equipCode 设备编码,pCode 品番编码，startTime 开始时间，endTime 结束时间
     * @return 返回统计信息
     */
    public ResultInfo<?> getMonthEquipPfCount(JSONObject param) {
        return this.getMonthEquipPfCountFromDas(param);
    }

    /**
     * 按月统计设备有效工作时长
     * @param param 参数 equipCode 设备编码,startTime 开始时间，endTime 结束时间
     * @return 返回统计信息
     */
    public ResultInfo<?> getMonthEquipWorkDuration(JSONObject param) {
        return this.getMonthEquipWorkDurationFromDas(param);
    }


    /**
     * 按年统计设备计数
     * @param param 参数 equipCode 设备编码,startTime 开始时间，endTime 结束时间
     * @return 返回统计信息
     */
    public ResultInfo<?> getYearEquipCount(JSONObject param) {
        return this.getYearEquipCountFromDas(param);
    }

    /**
     * 按年统计设备列表计数
     * @param param 参数 equipCodes 设备编码,startTime 开始时间，endTime 结束时间
     * @return 返回统计信息
     */
    public ResultInfo<?> queryYearEquipCount(JSONObject param) {
        return this.queryYearEquipCountFromDas(param);
    }

    /**
     * 按年统计设备品番计数
     * @param param 参数 equipCode 设备编码,pCode 品番编码，startTime 开始时间，endTime 结束时间
     * @return 返回统计信息
     */
    public ResultInfo<?> getYearEquipPfCount(JSONObject param) {
        return this.getYearEquipPfCountFromDas(param);
    }

    /**
     * 按年统计设备有效工作时长
     * @param param 参数 equipCode 设备编码,startTime 开始时间，endTime 结束时间
     * @return 返回统计信息
     */
    public ResultInfo<?> getYearEquipWorkDuration(JSONObject param) {
        return this.getYearEquipWorkDurationFromDas(param);
    }

    /********************************基础查询*********************************************/

    public ResultInfo<?> queryAllFromDas() {
        String url = this.dasApi + "das/queryAll";
        return restTemplate.postForObject(url, null, ResultInfo.class);
    }

    public ResultInfo<?> queryFromDas(JSONObject param) {
        String url = this.dasApi + "das/query";
        String condition = param.getString("condition");
        return restTemplate.postForObject(url, condition, ResultInfo.class);
    }

    public ResultInfo<?> queryByPageFromDas(JSONObject param) {
        String url = this.dasApi + "das/queryByPage";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    public ResultInfo<?> getByIdFromDas(Object id) {
        String url = this.dasApi + "das/getByField";
        JSONObject param = new JSONObject();
        param.put("id",id);
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    public ResultInfo<?> getByFieldFromDas(JSONObject param) {
        String url = this.dasApi + "das/getByField";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    /*********************************统计***********************************/

    public ResultInfo<?> getStatInfoFromDas(JSONObject param) {
        String url = this.dasApi + "das/stat";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    public ResultInfo<?> getMinuteEquipCountFromDas(JSONObject param) {
        String url = this.dasApi + "das/minute/equipCount";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    public ResultInfo<?> queryMinuteEquipCountFromDas(JSONObject param) {
        String url = this.dasApi + "das/minute/queryEquipCount";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    public ResultInfo<?> getHourEquipCountFromDas(JSONObject param) {
        String url = this.dasApi + "das/hour/equipCount";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    public ResultInfo<?> queryHourEquipCountFromDas(JSONObject param) {
        String url = this.dasApi + "das/hour/queryEquipCount";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    public ResultInfo<?> getHourEquipPfCountFromDas(JSONObject param) {
        String url = this.dasApi + "das/hour/equipPfCount";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    public ResultInfo<?> getHourEquipWorkDurationFromDas(JSONObject param) {
        String url = this.dasApi + "das/hour/equipWorkDuration";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }


    public ResultInfo<?> getDayEquipCountFromDas(JSONObject param) {
        String url = this.dasApi + "das/day/equipCount";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    public  ResultInfo<?> queryDayEquipCountFromDas(JSONObject param) {
        String url = this.dasApi + "das/day/queryEquipCount";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    public ResultInfo<?> getDayEquipPfCountFromDas(JSONObject param) {
        String url = this.dasApi + "das/day/equipPfCount";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    public ResultInfo<?> getDayEquipWorkDurationFromDas(JSONObject param) {
        String url = this.dasApi + "das/day/equipWorkDuration";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    public ResultInfo<?> getMonthEquipCountFromDas(JSONObject param) {
        String url = this.dasApi + "das/month/equipCount";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    public ResultInfo<?> queryMonthEquipCountFromDas(JSONObject param) {
        String url = this.dasApi + "das/month/queryEquipCount";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    public ResultInfo<?> getMonthEquipPfCountFromDas(JSONObject param) {
        String url = this.dasApi + "das/month/equipPfCount";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    public ResultInfo<?> getMonthEquipWorkDurationFromDas(JSONObject param) {
        String url = this.dasApi + "das/month/equipWorkDuration";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    public ResultInfo<?> getYearEquipCountFromDas(JSONObject param) {
        String url = this.dasApi + "das/year/equipCount";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    public ResultInfo<?> queryYearEquipCountFromDas(JSONObject param) {
        String url = this.dasApi + "das/year/queryEquipCount";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    public ResultInfo<?> getYearEquipPfCountFromDas(JSONObject param) {
        String url = this.dasApi + "das/year/equipPfCount";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }

    public ResultInfo<?> getYearEquipWorkDurationFromDas(JSONObject param) {
        String url = this.dasApi + "das/year/equipWorkDuration";
        return restTemplate.postForObject(url, param, ResultInfo.class);
    }
}
